package 其他.按照字符数量从小到大输出;

import java.util.*;

/**
 * 增强for 是一个 中序遍历 ~  左中右
 */
public class text_实现有序输出不改变原来的字符 {


    public static void main(String[] args) {

        // 使用 map 可以装这个 字符和次数的关系 ~
        HashMap<Character, Integer> map = new HashMap<>();

        String s = "fjiadfia"; // f 2 j 1 i 2 a 2 d 1    jdfia

        // 使用 list 可以顺序地装下这个不重复的字符
        ArrayList<Character> characterArrayList = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (map.containsKey(c)) {
                Integer integer = map.get(c);
                map.put(c, ++integer);
            } else {
                map.put(c, 1);
            }

            if (!characterArrayList.contains(s.charAt(i))){
                characterArrayList.add(s.charAt(i));
            }
        }

        // 使用这个TreeSet 可以实现这个 按照自定义的顺序规则来实现这个排序~
        TreeSet<Character> set = new TreeSet<>(new Comparator<Character>() {
            @Override
            public int compare(Character o1, Character o2) {
                int diff = map.get(o1) - map.get(o2);
                return diff == 0 ? 1 : diff;
            }
        });

        for (Character key : characterArrayList) {
            set.add(key);
        }

        for (Character character : set) {
            System.out.print(character + ",");
        }
        System.out.println();

        for (Character character : set) {
            System.out.print(map.get(character) + ",");
        }

    }
}
